package com.campusexpresspickup.service;

import com.campusexpresspickup.entity.OauthUser;
import com.campusexpresspickup.config.OauthUserDetails;
import com.campusexpresspickup.dto.UpdateUserPasswordParam;
import com.campusexpresspickup.dto.UserParam;
import com.campusexpresspickup.entity.OauthRole;
import com.baomidou.mybatisplus.extension.service.IService;
import com.campusexpresspickup.entity.UserResource;
import com.campusexpresspickup.page.OauthUserPage;
import java.util.List;
import org.springframework.transaction.annotation.Transactional;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author lq
 * @since 2021-11-15
 */
public interface IOauthUserService extends IService<OauthUser> {
  /**
   * 根据用户名获取后台管理员
   */
  OauthUser getUserByUsername(String account);

  /**
   * 注册功能
   */
  OauthUser register(UserParam userParam);

  /**
   * 登录功能
   */
  String login(String account,String password);

  /**
   * 刷新token的功能
   * @param oldToken 旧的token
   */
  String refreshToken(String oldToken);

  /**
   * 根据用户id获取用户
   */
  OauthUser getItem(Integer id);

  /**
   * 根据用户名或账号分页查询用户
   */
  List<OauthUser> list(OauthUserPage userPage);

  /**
   * 修改指定用户信息
   */
  int update(Integer id, OauthUser oauthUser);

  /**
   * 删除指定用户
   */
  int delete(Integer id);

  /**
   * 修改用户角色关系
   */
  @Transactional
  int updateRole(Integer userId, List<Integer> roleIds);

  /**
   * 获取用户对应角色
   */
  List<OauthRole> getRoleList(Integer userId);

  /**
   * 获取指定用户的可访问资源
   */
  List<UserResource> getResourceList(Integer userId);

  /**
   * 修改密码
   */
  int updatePassword(UpdateUserPasswordParam user);

  /**
   * 获取用户信息
   */
  OauthUserDetails loadUserByUsername(String account);
}
